#ifndef SWESOLVERTYPES_HPP
#define SWESOLVERTYPES_HPP

#include "meshTypes_fwd.hpp"
#include <variant>

namespace hms
{

/* swe specific boundary conditions */
template<typename MeshType>
class ConstantWaterDepth_velocity;

template<typename MeshType>
class FreeOutflow_velocity;

template<typename MeshType>
class FreeOutflow_waterdepth;

template<typename MeshType>
class OrthogonalFlowVelocity_velocity;

template<typename MeshType>
class OrthogonalFlowVelocity_waterdepth;

template<typename MeshType>
class Slip_velocity;



template<typename MeshType>
class SWESolver;

using SWESolverVariant = std::variant<
	SWESolver<      Mesh>,
	SWESolver<   UniMesh>,
	SWESolver<  RectMesh>,
	SWESolver<StructMesh>
>;


namespace swe {
	enum class RemAdjust {
		threshold,
		nextNeighbour,
		none
	};
};


} // namespace hms

#endif